package asem.ast.expresiones;

import alex.Token;
import asem.excepciones.ExcepcionTiposIncompatibles;
import asem.tablaSimbolos.tipo.Tipo;
import asem.tablaSimbolos.tipo.TipoBoolean;
import asem.tablaSimbolos.tipo.TipoInt;
import asem.tablaSimbolos.tipo.TipoMetodo;

public class NodoExpresionUnaria extends NodoExpresion {
	protected NodoExpresion expresion;
	protected Token operador;

	public NodoExpresionUnaria(Token token, NodoExpresion exp) {
		operador = token;
		expresion = exp;
	}

	@Override
	public TipoMetodo chequeoSentencias() {
		Tipo t = (Tipo) expresion.chequeoSentencias();

		switch (operador.getTipo()) {
		case O_Negacion:
			if (t.equals(TipoBoolean.TIPO))
				return TipoBoolean.TIPO;
			break;
		case O_Suma:
		case O_Resta:
			if (t.equals(TipoInt.TIPO))
				return TipoInt.TIPO;
			break;
		default:
			break;
		}

		throw new ExcepcionTiposIncompatibles(t, operador);
	}
}
